package day4.demo;

public class Productor extends Sleep implements Runnable {
	// 仓库对象，多线程争夺的资源
	private Container contain = null;

	public Productor() {

	}

	public Productor(Container contain ) {
		this.contain = contain;
	}

	@Override
	public void run() {
		//生产者一直生产，当产品在仓库中装不下后，休息
		while(true){
			//对仓库的操作，要上锁
			synchronized (contain) {
				//如果仓库已满，需要让工人休息
				while(contain.isFull()){
					try {
						//自己把自己放入等待队列，不使用 CPU
						//把 CPU 留给 消费者线程使用
						//让出 CPU 后，如何唤醒，需要消费者唤醒
						contain.wait();
					} catch (Exception e) {
						// TODO: handle exception
					}
				}
			}
			
			//正常情况下，一直不停的生产
			this.producter();  //生产商品
			try {
				//当前一个生产者线程，生产完毕，小睡一段时间
				this.haveSleep(); 
			} catch (Exception e) {
				// TODO: handle exception
			}
			
			//设置生产者生产结束后，如何唤醒 消费者线程
			synchronized (contain) {
				contain.notify();
			}
			
		}
	}
	
	
	
	/**
	 * 生产一个商品
	 */
	public void producter(){
		int num = (int)(Math.random()*100);
		Product prod = new AProduct("商品条形码编号:"+num);
		System.out.println("生产者生产一个商品，商品信息:"+prod);
		//把商品放入仓库
		this.contain.push(prod);
		
	}
	
	
	
	

}
